list_dict=[
 {
  "name": "photo1.jpg",
  "tags": {'coffee', 'breakfast', 'drink', 'table', 'tableware', 'cup', 'food'}
 },
 {
  "name": "photo2.jpg",
  "tags": {'food', 'dish', 'meat', 'meal', 'tableware', 'dinner', 'vegetable'}
 },
 {
  "name": "photo3.jpg",
  "tags": {'city', 'skyline', 'cityscape', 'skyscraper', 'architecture', 'building', 'travel'}
 },
 {
  "name": "photo4.jpg",
  "tags": {'drink', 'juice', 'glass', 'meal', 'fruit', 'food', 'grapes'}
 },
 {
  "name":"photo4.jpg",
  "tags":{'drink','juice','meal','food'}
 }
]
# Входные данные: список словарей, где каждый словарь представляет собой фотографию. name - название, tags - теги, ищем похожие фотографии по тегам.
photo_groups={}
def intersecting(lst1,lst2):
    return ', '.join(val for val in lst1 if val in lst2)
def main():
    for i in range(1,len(list_dict)):
        for j in range(i+1,len(list_dict)+1):
            print(f'Похожие теги у фотографии {i} с фотографией {j}')
            lst=intersecting(list_dict[i-1]['tags'],list_dict[j-1]['tags'])
            if lst:
                photo_groups.setdefault(lst,list((list_dict[i-1]['name'],list_dict[j-1]['name'])))
    print(photo_groups)
if __name__=='__main__':
    main()
# в последней строке результата запуска программы в консоли программа выводит в консоль темы похожих фотографий, а затем выводит фотографии в виде списка